//
//  MainViewController.swift
//  WeiBoDemo
//
//  Created by China Dragon on 2023/8/24.
//

import UIKit

class MainViewController: UITabBarController {
    
    //MARK: - 点击撰写按钮函数
    /*
        swift 里面默认是全局共享的，添加 private 可以保护
        swift 没有消息机制，消息机制是OC的，所以这里需要添加 @objc ，否则点击撰写按钮后程序会奔溃
     */
    @objc private func clickComposedButton(){
        print("点击撰写按钮了 ")
    }

    //MARK: - 视图生命周期函数
    override func viewDidLoad() {
        super.viewDidLoad()

        //添加控制器，并不会创建 tabBar 中的按钮
        addChilds()
        
//        print(tabBar.subviews)
        
        setComposedButton()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        //会创建 tabBar 中控制器对应的按钮
        super.viewWillAppear(animated)
//        print(tabBar.subviews)
        
        //将撰写按钮放到最前面
        tabBar.bringSubviewToFront(composeButton)
    }
    
    //MARK: - 懒加载控件
    private lazy var composeButton : UIButton = UIButton(
        imageName: "tabbar_compose_icon_add",
        backImageName: "tabbar_compose_button")
    
//    private lazy var composeButton : UIButton = {
//        //调用默认的构造函数是 自定义的按钮
//       let button = UIButton()//
//        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: UIControl.State.normal)
//        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: UIControl.State.highlighted)
//        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: UIControl.State.normal)
//        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: UIControl.State.highlighted)
//
//        //会根据背景图片大小调整尺寸
//        button.sizeToFit()
//
//        return button
//    }()
    
}

//MARK: - 设置界面
extension MainViewController{
    
    // 注释说明：///  选中setComposedButton 按住 option键盘 可以查看注释说明文案， // 没有
    // 函数的注释使用 ///
    ///设置撰写按钮
    private func setComposedButton(){
        // 添加按钮
        tabBar.addSubview(composeButton)
        //调整按钮位置
        let count = children.count
//        let w = tabBar.bounds.width / CGFloat(count)
        //让按钮宽一点点，解决手指触摸的容错问题，
        let w = tabBar.bounds.width / CGFloat(count) - 1
        
        /*
         https://www.jianshu.com/p/6a5e640d66fe
         CGRectInset  将原来的矩形放大或者缩小，正表示缩小，－表示放大。
         
         https://blog.51cto.com/u_13481937/6321966
         
         iOS CGRectInset、CGRectOffet的理解
         https://blog.csdn.net/a18339063397/article/details/99844787
         
         CGRectInset 与 CGRectOffset 都是通过参数改变CGRect并返回一个CGRect类型的数据。总结出两者的区别在于：CGRectInset会进行平移和缩放两个操作。CGRectOffset做的只是平移。

         先把苹果的官方文档做简要解释：

         CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)：

         通过第二个参数 dx 和第三个参数 dy 重置第一个参数 rect 作为结果返回。重置的方式为，首先将 rect 的坐标（origin）按照(dx,dy) 进行平移，然后将 rect 的大小（size） 宽度缩小2倍的 dx，高度缩小2倍的 dy。

         CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy)：

         rect 按照（dx,dy）进行平移。


         */
        
        //设置大小
        composeButton.frame = CGRectInset(tabBar.bounds, 2 * w, 0)
        
        //添加监听函数
        // 快捷键：在单词后面按住 option + 向左 键 光标自动来的单词前面
//        composeButton.addTarget(self, action: Selector(("clickComposeButton")), for: UIControl.Event.touchUpInside)
        composeButton.addTarget(self, action: Selector("clickComposedButton"), for: UIControl.Event.touchUpInside)
        
    }
    
    private func addChilds(){
        
        //设置tintColor 图片渲染颜色
        tabBar.tintColor = UIColor.orange// 设置选中的tab颜色，这样可以不用设置选中的tab图片
        
        addChild(vc: HomeTableViewController(), title: "首页", imageName: "tabbar_home")
        addChild(vc: MessgeTableViewController(), title: "消息", imageName: "tabbar_message_center")
        
        addChild(UIViewController())
        
        addChild(vc: DiscoverTableViewController(), title: "发现", imageName: "tabbar_discover")
        addChild(vc: ProfileTableViewController(), title: "我", imageName: "tabbar_profile")
    }
    
    //添加控制器
    private func addChild(vc: UIViewController, title: String, imageName: String) {
        //由内至外
        vc.title = title
        vc.tabBarItem.image = UIImage(named: imageName)
        //导航控制器 标题 和上面的标题是同时设置的
        let nav = UINavigationController(rootViewController: vc)
//        nav.tabBarItem.title = "首页" //这里设置，上面的注释掉，页面出现底部tab有首页标题，上面没有
        addChild(nav)//调用父类的方法
        
    }
    
//    override func addChild(_ childController: UIViewController) {
//
//    }
//
}
